8
תגובות
אני יודע שיש כאן כמה אנשים שמתנגדים לחלוטין לשימוש בסטטיות, אבל אני חושב ששימוש זהיר וקפדני בזה יכול לעשות רק טוב.
תגידו לי אתם מה יהיה טוב יותר בדוגמה הבאה (סמלי בלבד):
// the static way
Math::sqrRoot(5);

// the non-static way
$math = new Math();
$result = $math->sqrRoot(5);

אני חושב שהגיע הזמן לרכז בעברית את כל הדברים שצריך לדעת על שימוש בסטטיות - ממה צריך להיזהר כשעושים את זה, ואם בכלל כדאי לעשות את זה.

8 תשובות

avatar ענה intval ב 01 לנובמבר 2013 #

בPHP פונקציות כמו sqrt בכלל לא צריכות להיות שייכות למחלקה. אם אתה רוצה אותן מופרדות, שים אותן בניימספייס אחר. אבל אין בינהם שום קשר לתכנות מונחה עצמים.
בשפות אחרות, באיחוד כאלה שבהם אין קוד מחוץ למחלקות, כמו java / c#, אין לך כל כך ברירה ושם זה סיפור קצת שונה.

avatar ענה OrelBeY ב 01 לנובמבר 2013 #

יש משהו במה שאתה אומר. אתה בעצם אומר שאין צורך בחברי מחלקה סטטיים ב-PHP כי כל המטרה של זה זה לשלב גם את הגישה הפרוצדורלית? (וב-PHP כבר יש את זה, אז אין צורך?)

avatar ענה intval ב 01 לנובמבר 2013 #

המטרה של מטודות סטטיות היא לא לשלב גישה פרוצדורלית, אלה מניפולציות או חסכון בזכרון. ב-PHP אין בזה צורך.

מעבר לזה שיש יחסית מעט מקרים שבהם יש לך מחלקת Math. יש לך מחלקה שפותרת משוואות, או מחלקה שעושה עוד משהו מועיל ובהם יכולה להיות מטודה פרטית שמוציאה שורש. כל שאר התוכנה שלך בכלל לא צריכה את המחלקה Math.

avatar ענה OrelBeY ב 01 לנובמבר 2013 #

אבל מה הסיבה לפסול את זה לגמרי? מה עם מולטיטון/סינגלטון למשל?

avatar ענה intval ב 01 לנובמבר 2013 #

אנטיפרטרן, מיותר לחלוטין עם הרבה בעיות.
בכל דוגמה שתמצא ב-PHP תראה ששימוש במשהו סטטי מעיד על ארכיטקטורה לא נכונה, לכן כל עוד אתה נמנע מדברים סטטים, הסיכוי שלך לעשות טעיות ארכיטקטוריות הרבה יותר נמוך.

הבעיה הכי פחות קריטית מבחינה ארכיטקטורית עם סינגלטון היא זו שמחלקה מתחילה לעשות שני דברים: להיות אחריאית על יצירת מחלקה אחרת ולעשות את הביזנס לוגיקה האמיתית שהיא צריכה לעשות. אתה בתור מתכנת רוצה שמחלקה תעשה או תהיה אחראית רק על דבר אחד. עם סינגלטון, שני אלו הם פעולות שונות קונצפטואלית. אם אתה רוצה מישהו שיהיה אחראי ליצירת מחלקות, תוציא אותו למחלקת factory נפרדת ואופה, הצורך בסינגלטון נעלם. הפקטורי יהיה מסוגל לספור ולהחליט בעצמו מה לעשות כדי ליצור מחלקה חדשה.

avatar ענה OrelBeY ב 01 לנובמבר 2013 #

הבנתי את ההתנגדות שלך למתודות סטטיות. אבל מה עם משתנים סטטיים? (קבוע של מחלקה למשל תמיד יהיה סטטי.) מה עם משתנים סטטיים שהתחום שלהם בתוך פונקציות?

avatar ענה intval ב 01 לנובמבר 2013 #

קבוע זה קבוע ואני בעד קבועים.
לגבי משתנים, אם אין לך מטודות סטטיות, גם אין סיבה שיהיו לך משתנים סטטיים, למרות שהסיפור איתם זהה.

avatar ענה OrelBeY ב 01 לנובמבר 2013 #

מצאתי מאמר מעולה שמפרט על הנושא ומסביר אותו באריכות.